package org.dolphin.dao;

import java.io.Serializable;
import java.util.List;
import org.dolphin.base.bean.FlatProductAttributeVO;
import org.dolphin.base.bean.FlatProductItemSearchVO;
import org.dolphin.base.bean.FlatProductItemVO;
import org.dolphin.entity.inventory.ProductAttribute;
import org.hibernate.criterion.Order;

public interface ProductAttributeDao {
  public ProductAttribute fetchProductAttribute(Serializable id);

  public ProductAttribute fetchProductAttribute(Serializable id, boolean fetchProduct);

  public ProductAttribute getProductAttribute(String sku);

  public ProductAttribute getProductAttribute(String sku, Serializable excludedId);

  public List<FlatProductAttributeVO> getProductAttributes(Serializable productId, int firstResult,
      int maxResults, List<Order> orders);

  public Long getProductAttributesCount(Serializable productId);

  public List<FlatProductItemVO> getProductItems(int firstResult, int maxResults, List<Order> orders);

  public Long getProductItemsCount();

  public List<FlatProductItemSearchVO> getProductItemSearch(int firstResult, int maxResults,
      List<Order> orders);

  public Long getProductItemSearchCount();

  public ProductAttribute loadProductAttribute(Serializable id);

  public void saveProductAttribute(ProductAttribute productAttribute);

  public void updateProductAttribute(ProductAttribute productAttribute);
}
